package saa.dominio;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import saa.dominio.disciplina.Disciplina;
import saa.dominio.usuario.Aluno;
import saa.dominio.usuario.Coordenador;
 
@Entity
@NamedQueries({
    @NamedQuery(name = "Cursos", query = "SELECT c FROM Curso c")})
public class Curso implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(nullable = false)
    private String nome;
    @Column(nullable = false)
    private int notaMinimaParaPassar;
    @Column(nullable = false)
    private int notaMinimaParaRecuperacao;
    @Column(nullable = false)
    private int percentualPresencaMinimo;

    @Column(nullable = true)
    @OneToOne
    private Coordenador coordenador;

    @OneToMany(mappedBy = "curso")
    private List<Disciplina> disciplinas;

    @OneToMany(mappedBy = "curso")
    private List<Aluno> alunos;

    public Curso() {
        super();
    }

    public Curso(String nome, int notaMinimaParaPassar, int notaMinimaParaRecuperacao, int percentualPresencaMinimo) {
        this.nome = nome;
        this.notaMinimaParaPassar = notaMinimaParaPassar;
        this.notaMinimaParaRecuperacao = notaMinimaParaRecuperacao;
        this.percentualPresencaMinimo = percentualPresencaMinimo;
        this.disciplinas = new ArrayList<Disciplina>();
        this.alunos = new ArrayList<Aluno>();
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public List<Disciplina> getDisciplinas() {
        return disciplinas;
    }

    public void setDisciplinas(List<Disciplina> disciplinas) {
        this.disciplinas = disciplinas;
    }

    public void addDisciplinas(Disciplina disciplina) {
        this.disciplinas.add(disciplina);
    }

    public List<Aluno> getAlunos() {
        return alunos;
    }

    public void setAlunos(List<Aluno> alunos) {
        this.alunos = alunos;
    }

    public void addAluno(Aluno aluno) {
        this.alunos.add(aluno);
    }

    public int getNotaMinimaParaPassar() {
        return notaMinimaParaPassar;
    }

    public void setNotaMinimaParaPassar(int notaMinimaParaPassar) {
        this.notaMinimaParaPassar = notaMinimaParaPassar;
    }

    public int getNotaMinimaParaRecuperacao() {
        return notaMinimaParaRecuperacao;
    }

    public void setNotaMinimaParaRecuperacao(int notaMinimaParaRecuperacao) {
        this.notaMinimaParaRecuperacao = notaMinimaParaRecuperacao;
    }

    public int getPercentualPresencaMinimo() {
        return percentualPresencaMinimo;
    }

    public void setPercentualPresencaMinimo(int percentualPresencaMinimo) {
        this.percentualPresencaMinimo = percentualPresencaMinimo;
    }

    public Coordenador getCoordenador() {
        return coordenador;
    }

    public void setCoordenador(Coordenador coordenador) {
        this.coordenador = coordenador;
    }

}
